package com.itbaizhan.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
/*简单模式*/
//生产者
public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.66.101"); //连接的ip地址
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/");  //设置虚拟机，默认是 /
        //2创建连接
        Connection connection = connectionFactory.newConnection();
        //3建立信道   （因为简单模式，有黙认的交换机direct，所以不用创建交换机）
        Channel channel = connection.createChannel();
        //4创建队列，如果队列已存在，则使用这队列
        /*
        *参数1：队列名
        * 参数2：是否持久化，true表示MQ重启后队列还在
        * 参数3：是否私有化，false表示所有消费者都可以访问  true表示只有第一次拥有它的消费者才可以访问
        * 参数4： 是否自动删除，true表示不再使用队列时自动删除队列
        * 参数5：其他的额外参数
        * */
        channel.queueDeclare("simple_queue",false,false,false,null);
        //5发送消息
        String message = "hello!rabbitmq";
        /*
         *参数1：交换机名， "" 表示默认的交换机
         * 参数2：路由键，简单模式就是队列名
         * 参数3：其他的额外参数
         * 参数4： 要传送的字节数组
         * */
        channel.basicPublish("","simple_queue",null,message.getBytes());
        //6关闭信道和连接   先关信道，再关连接
        channel.close();
        connection.close();
        System.out.println("发送成功");
    }
}
/*特点：

一个生产者对应一个消费者，通过队列进行消息传递。

该模式使用direct交换机，direct交换机是RabbitMQ默认交换机。*/